package Projekt;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowAdapter;
import java.awt.*;
import javax.swing.*;


public class MainFrame extends JFrame {
	private static final long serialVersionUID = 1L;
	
   //Menueleiste jmb sowie Menues 1 - 4
	JMenuBar jmb = new JMenuBar();
	JMenu menu1 = new JMenu("Datei");
	JMenu menu2 = new JMenu("Einstellungen");
	JMenu menu3 = new JMenu("Zeichnen");
	JMenu menu4 = new JMenu("Hilfe");
   //Menuepunkte Datei-Menue	
	JMenuItem item11 = new JMenuItem("Oeffnen");
	JMenuItem item12 = new JMenuItem("Loeschen");
	JMenuItem item13 = new JMenuItem("Beenden");
   //Menuepunkte Einstellungen-Menue		
	JMenuItem item21 = new JMenuItem("Zeichenfarbe");
	JMenuItem item22 = new JMenuItem("Fuellfarbe");
	JCheckBoxMenuItem item23 = new JCheckBoxMenuItem("Fuellen",false);
	JCheckBoxMenuItem item24 = new JCheckBoxMenuItem("Schraffieren",false);
	//Menuepunkte Zeichnen-Menue fuer Polygon
	JCheckBoxMenuItem item3 = new JCheckBoxMenuItem("Zeichnen",false);
   //Menuepunkt - Hilfe-Menue	
	JMenuItem item41 = new JMenuItem("Info");
   //ContentPane und Zeichenpanel
	JPanel cp ;				
	PaintPanel pPanel = new PaintPanel();	
	//Zeichenpanel - eigene Klasse PaintPanel
	
   //Konstruktor der Klasse MainFrame
	public MainFrame(){
		this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
       //Aufbau der Menueleiste 
       //Zuordnung der Ereignismethoden
	   //Datei-Menue	
		menu1.add(item11);menu1.add(item12);
		menu1.addSeparator();menu1.add(item13);
		item13.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent arg0) {
				close_MainFrame();			
			}	
		});
		item12.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent arg0){
				pPanel.clearall();
			}
		});
		jmb.add(menu1);
	   //Einstellungen-Menue
		menu2.add(item21);
		menu2.add(item22);
		menu2.addSeparator();
		menu2.add(item23);
		menu2.add(item24);
		item21.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent arg0) {
			  //Zeichenfarbe fuer ZeichenPanel setzen , nutzt eigene Funktion colorDialog
			   pPanel.setLineColor(colorDialog("Zeichenfarbe",Color.black));	
			}
		});
		item22.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e) {
			   //Fuellfarbe fuer ZeichenPanel setzen , nutzt eigene Funktion colorDialog
				pPanel.setFillColor(colorDialog("Fuellfarbe",Color.white));		
			}
		});
		item23.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e) {
			   //Fuellmodus fuer ZeichenPanel setzen wenn Objekt gefuellt werden soll
				if(item23.isSelected()){
					pPanel.setFillMode(true);
					pPanel.setShadeMode(false);
					item24.setSelected(false);
					item3.setSelected(false);
					pPanel.setDrawMode(false);
					pPanel.undoLine();
				}
			}
		});
		item24.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e) {
			   //Fuellmodus fuer ZeichenPanel setzen wenn Objekt gefuellt werden soll
				if(item24.isSelected()){
					pPanel.setShadeMode(true);
					pPanel.setFillMode(false);
					item23.setSelected(false);
					item3.setSelected(false);
					pPanel.setDrawMode(false);
					pPanel.undoLine();
				}
			}
		});
		jmb.add(menu2);
	   //Zeichnen-Menue
		item3.addActionListener(new ActionListener() {			
			public void actionPerformed(ActionEvent e) {
				//Aufruf der Zeichenmethode Polygon, wenn Polygon erzeugt werden soll
				if(item3.isSelected()){
					pPanel.setDrawMode(true);
					pPanel.setShadeMode(false);
					item24.setSelected(false);
					item23.setSelected(false);
					pPanel.setFillMode(false);
				}else{
					pPanel.setDrawMode(false);
					pPanel.undoLine();
				}
			}
		});
		menu3.add(item3);
		
		jmb.add(menu3);
	   //Hilfe-Menue
		menu4.add(item41);
		item41.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e) {
				show_info();
			}
		});
		jmb.add(menu4);
	   //Menueleiste anzeigen
		this.setJMenuBar(jmb);
	   
	   //Schliessen des Fensters - entspricht Datei/Beenden
		this.addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent arg0) {
				close_MainFrame();	
			}
		});
	   
	   //contentPane ermitteln, Layout zuordnen, Zeichenpanel hinzufuegen
		cp = (JPanel)this.getContentPane();
		cp.setLayout(new BorderLayout());
		cp.add(pPanel,BorderLayout.CENTER);
		
	}
   
   //Ereignismethode close_MainFrame (Fenster schlie�en , Datei/Beenden)
	private void close_MainFrame(){
		System.exit(0);
	}
   //Ereignismethode - Hilfe/Info
	private void show_info(){
		JOptionPane.showMessageDialog(this,"Version 1.00","Copyright",JOptionPane.INFORMATION_MESSAGE);
	}
   //Funktion wird fuer das Setzen der Zeichen-  und der Fuellfarbe genutzt
	private Color colorDialog(String text,Color customCol){
		return JColorChooser.showDialog(this,text+" waehlen",customCol);
	}
	
   //main-Methode : erzeugt und zeigt Hauptfenster an
	public static void main(String[] args){
		MainFrame wnd = new MainFrame();
		wnd.setLocation(100,100);
		wnd.setSize(600,400);
		wnd.setTitle("Computergrafik - Projekt");
		wnd.setVisible(true);
	}

}
